package com.skyworth.utils;

/**
 * Created by skyworth on 2016/9/26.
 */
public class Chn2Py {

	//简体中文的变编码范围从B0A1(45217) 到F7FE(63468)
	private static int BEGIN = 45217;
	private static int END = 63468;
	// 对应首字母区间表
	private static char[] initialtable = { 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'h', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 't', 't', 'w', 'x', 'y', 'z', };
	// 按照声 母表示，这个表是在GB2312中的出现的第一个汉字，也就是说“啊”是代表首字母a的第一个汉字。
	// i, u, v都不做声母, 自定规则跟随前面的字母
	private static char[] chartable = { '啊', '芭', '擦', '搭', '蛾', '发', '噶', '哈', '哈', '击', '喀', '垃', '妈', '拿', '哦', '啪', '期', '然', '撒', '塌', '塌', '塌', '挖', '昔', '压', '匝', };

	// 二十六个字母区间对应二十七个端点
	// GB2312码汉字区间十进制表示
	private static int[] table = new int[27];

	private static String m_encode = "GB2312";
	// 初始化
	static {
		for (int i = 0; i < 26; i++) {
			table[i] = gbValue(chartable[i]);// 得到GB2312码的首字母区间端点表，十进制。
		}
		table[26] = END;// 区间表结尾
	}

	public static String chn2py(String srcStr){
		String ret = "";
		int srcLen = srcStr.length();
		m_encode = getEncoding(srcStr);
		try {
			int i = 0;
			for(i=0; i<srcLen; i++){
				ret += char2Initial(srcStr.charAt(i));
			}
		}catch (Exception e){
			ret = "";
			e.printStackTrace();
		}
		return ret;
	}
	private static char char2Initial(char ch){
		if(ch >= 'a' && ch <= 'z'){
			return (char)(ch-'a'+'A');
		}
		if(ch >= 'A' && ch <= 'Z'){
			return ch;
		}

		int gb = gbValue(ch);
		if(gb < BEGIN || gb > END){
			return ch;
		}
		int i =0;
		for(i=0; i< 26; i++){
			if(gb >= table[i] && gb <table[i+1]){
				break;
			}
		}
		if(gb==END){
			i=25;
		}
		return initialtable[i];
	}

	/*
	取汉子的编码
	 */
	private static int gbValue(char ch){
		String str = new String();
		str +=ch;
		try{
			byte[] bytes = str.getBytes(m_encode);
			if(bytes.length < 2){
				return 0;
			}
			return (bytes[0] << 8 & 0xff00)+(bytes[1] & 0xff);
		}catch (Exception e){
			return 0;
		}

	}

	public static String getEncoding(String str) {
		String encode = "GB2312";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s = encode;
				return s;
			}
		} catch (Exception exception) {
		}
		encode = "ISO-8859-1";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s1 = encode;
				return s1;
			}
		} catch (Exception exception1) {
		}
		encode = "UTF-8";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s2 = encode;
				return s2;
			}
		} catch (Exception exception2) {
		}
		encode = "GBK";
		try {
			if (str.equals(new String(str.getBytes(encode), encode))) {
				String s3 = encode;
				return s3;
			}
		} catch (Exception exception3) {
		}
		return "";
	}


	public static void stub(String[] args){
		System.out.println(chn2py("南京市市长视察长江"));

	}
}
